/*
 * InputServidor.cpp
 *
 *  Created on: 13/10/2012
 *      Author: leandro
 */

#include "InputServidor.h"

InputServidor::InputServidor(Personaje* personaje, int tipoPersonaje) {
	jugador = personaje;
	this->tipoPersonaje = tipoPersonaje;
	
	mensajes = "";
	
	estadoDerecha = jugador->getDirEstadoDerecha();
	estadoIzquierda = jugador->getDirEstadoIzquierda();
	estadoArriba = jugador->getDirEstadoArriba();
	estadoAbajo = jugador->getDirEstadoAbajo();
	estadoSalto = jugador->getDirEstadoSalto();
}

InputServidor::~InputServidor() {
	
	jugador->setEstadoVida(Muerto);
	delete jugador;
	jugador = NULL;
}

void InputServidor::DecodificarTeclas(string cadena) {

	mensajes += cadena;
	if (mensajes.find_first_of('#') != string::npos) {
			
		string mensajeAProcesar = mensajes.substr(0, mensajes.find_first_of("#"));
		mensajes = mensajes.substr(mensajes.find_first_of('#')+1);

		unsigned int posSeparador = mensajeAProcesar.find_first_of(";");
		int tecla = atoi(mensajeAProcesar.substr(0, posSeparador).c_str());
		EstadoMovimiento estado = (EstadoMovimiento)atoi(mensajeAProcesar.substr(posSeparador+1).c_str());
				
		pair< int, EstadoMovimiento> par(tecla, estado);
		teclas.push_back(par);
		
	}
}

void InputServidor::manejarInput() {
	
	EstadoMovimiento* estados[] = {estadoDerecha, estadoIzquierda, estadoArriba, estadoAbajo, estadoSalto};
	int teclasPosibles[] = {SDLK_RIGHT, SDLK_LEFT, SDLK_UP, SDLK_DOWN, SDLK_SPACE};
	unsigned int size = 5;
	
	if (teclas.size() > 0) {
			
		if (teclas.at(0).first != 0) {

			EstadoMovimiento* estado = NULL;
		
			for (unsigned int j=0; j<size; j++) {
				if (teclas.at(0).first == teclasPosibles[j]) {
					estado = estados[j];
					break;
				}
			}
			
			if (teclas.at(0).second == Empezo) *estado = Empezo;
			if (teclas.at(0).second == Freno) *estado = Freno;
			
		}
		
		teclas.erase(teclas.begin());
	}

}

Personaje* InputServidor::getJugador() {
	return jugador;
}

int InputServidor::getTipoPersonaje() {
	
	return tipoPersonaje;
}

bool InputServidor::JugadorGano() {
	
	return jugador->Gano();
}